// 一个发布者 publisher，功能就是负责发布消息 - publish
var pub = {
  publish: function () {
    dep.notify()
  },
}
// 多个订阅者 subscribers， 在发布者发布消息之后执行函数
var sub = {
  update: function () {
    console.log(1)
  },
}
// 一个主题对象
function Dep() {
  this.subs = [sub]
}

Dep.prototype.notify = function () {
  this.subs.forEach(function (sub) {
    sub.update()
  })
}

// 发布者发布消息， 主题对象执行notify方法，进而触发订阅者执行Update方法
var dep = new Dep()
pub.publish()

// 最简单的发布订阅就是addEventListener
// 三个参数，监听的事件，回调函数，true - 事件句柄在捕获阶段执行，false- false- 默认。事件句柄在冒泡阶段执行
document.addEventListener('click', () => {
  console.log('You click me!')
})

document.addEventListener('click', () => {
  console.log('You click me again???')
})

const pub = () => {
  publish: () => {
    dep.notify()
  }
}
const sub = () => {
  update: () => {
    console.log('update')
  }
}
class Dep {
  constructor(sub) {
    this.subs = [sub]
  }
}
Dep.prototype.notify = () => {
  this.subs.forEach((sub) => {
    sub.update()
  })
}
const dep = new Dep()
pub.publish()
